﻿//----------------------------------------------
// Flip Web Apps: Game Framework
// Copyright © 2016 Flip Web Apps / Mark Hewitt
//
// Please direct any bugs/comments/suggestions to http://www.flipwebapps.com
// 
// The copyright owner grants to the end user a non-exclusive, worldwide, and perpetual license to this Asset
// to integrate only as incorporated and embedded components of electronic games and interactive media and 
// distribute such electronic game and interactive media. End user may modify Assets. End user may otherwise 
// not reproduce, distribute, sublicense, rent, lease or lend the Assets. It is emphasized that the end 
// user shall not be entitled to distribute or transfer in any way (including, without, limitation by way of 
// sublicense) the Assets in any other way than as integrated components of electronic games and interactive media. 

// The above copyright notice and this permission notice must not be removed from any files.

// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//----------------------------------------------

using GameFramework.EditorExtras.Editor;
using GameFramework.GameStructure.Game.Components;
using GameFramework.GameStructure.Game.Editor.GameActions;
using GameFramework.GameStructure.Game.Editor.GameConditions.Common;
using GameFramework.Helper;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

namespace GameFramework.GameStructure.Game.Editor
{
    [CustomEditor(typeof(RunGameActions))]
    public class RunGameActionsEditor : UnityEditor.Editor
    {
        SerializedProperty _automaticallyRunProperty;
        SerializedProperty _actionReferencesProperty;

        RunGameActions runGameActions;

        List<ClassDetailsAttribute> _gameActionClassDetails;
        Rect _mainHelpRect;

        GameActionEditor[] actionEditors;

        protected virtual void OnEnable()
        {
            runGameActions = (RunGameActions)target;

            // get serialized objects so we can use attached property drawers (e.g. tooltips, ...)
            _automaticallyRunProperty = serializedObject.FindProperty("_automaticallyRun");
            _actionReferencesProperty = serializedObject.FindProperty("_actionReferences");

            // setup actions types
            _gameActionClassDetails = GameActionEditorHelper.FindTypesClassDetails();
        }

        protected void OnDisable()
        {
            EditorHelper.CleanupSubEditors(actionEditors);
            actionEditors = null;
        }

        public override void OnInspectorGUI()
        {
            serializedObject.Update();
            DrawGUI();
            serializedObject.ApplyModifiedProperties();
        }


        protected void DrawGUI()
        {
            _mainHelpRect = EditorHelper.ShowHideableHelpBox("GameFramework.RunActionsEditor", "Use this component run Game Actions either automatically or through a callback from another component.", _mainHelpRect);

            EditorGUILayout.PropertyField(_automaticallyRunProperty);
            GameActionEditorHelper.DrawActions(serializedObject, _actionReferencesProperty, runGameActions.ActionReferences,
                ref actionEditors, _gameActionClassDetails, null);
        }
    }
}
